// 使用Express框架构建一个web服务
// 1. 引入框架
const express = require("express");
// 2. 创建app应用对象
const  app = express();

// 需要（中间件）使用编码处理post请求参数，才可以获取
app.use(express.urlencoded({ extended: true }))
// 将项目中的public目录直接暴露出去，让客户端浏览器可以直接方法（静态资源配置）
app.use(express.static("public")); // 不指定访问前缀
//app.use("/static", express.static("public")); // 指定访问前缀/static

// 3. 设置请求事件处理函数（根据请求作出响应）
app.get("/", (req, res) => {
    //res.send("Hello World!");
    // 响应views目录下的index.html内容
    // 注意：sendFile()方法中的参数文件必须使用绝对路径
    //res.sendFile("C:\\Users\\zhangtao\\Desktop\\code\\01-Express框架\\object\\views\\index.html");
    //console.log(__dirname); // 输出当前脚本文件所在目录路径
    res.sendFile(__dirname + "/views/index.html");
});
app.get("/login", (req, res) => {
    res.send("会员登录");
});
// (get, /users) 会员展示
app.get("/users", (req, res) => {
    res.send("会员展示");
});
// (get, /form) 加载form表单 
app.get("/form", (req, res) => {
    // 响应views/form.html表单
    res.sendFile(__dirname + "/views/form.html");
});

// （get  /demo01）get请求参数的处理
app.get("/demo01", (req, res) => {
    console.log("请求地址",req.url);
    console.log("请求方法",req.method);
    console.log("get请求参数",req.query);
    res.send("ok: "+req.query.uname+" "+req.query.sex);
});

// （post  /demo02）post请求参数的处理
app.post("/demo02", (req, res) => {
    // 从post请求中获取信息，使用body属性
    console.log("请求地址",req.url);
    console.log("请求方法",req.method);
    console.log("post请求参数",req.body);
    res.send("ok2");
});

// (get  /demo03) 跳转到百度（重定向）
app.get("/demo03", (req, res) => {
    // 通过res重定向到百度
    res.redirect("http://www.baidu.com");
    // 重定向到登录页
    //res.redirect("/login");
});


// (get /qq) 加载qq音乐页面
app.get("/qq", (req, res)=>{
    // 响应qq音乐页面（views/qq.html）
    res.sendFile(__dirname + "/views/qq.html");
});


// 路线路径可以是字符串、字符串模式或正则表达式
//1. 字符串模式
// （get， /abcd 或 /acd）
// app.get("/ab?cd", (req, res) => {
//     res.send("ab?cd");
// });
// （get， /abcd、/abbcd 获取 /abbbbbcd） b的数量至少一次
// app.get("/ab+cd", (req, res) => {
//     res.send("ab+cd");   
// });
//（get， /a*d）*表示任意内容
// app.get("/a*d", (req, res) => {
//     res.send("a*d");   
// });
// 2， 正则模式：
// 以/b开头 a字母结尾 中间任意4位数字
app.get(/^\/b[0-9]{4}a$/, (req, res) => {
    res.send("正则表达式路由");   
});


// 路由参数： 想实现：get请求地址 /user/id号参数
// (get  /user/:id)  例如请求：/user/200  那么 200就会作为参数传给uid
app.get("/user/:uid", (req, res) => {
    // 通过prarams获取路由参数信息
    res.send(`加载uid为${req.params.uid}的用户详情信息`);
});


// 4. 监听端口，并启动服务
app.listen("3000",() => {
    console.log("服务已启动,端口：3000");
});


// 扩展 使用path来合并目录和文件
// const path = require("path");
// path.join(url+filename)

